var events = {};

/**
 * 订阅
 */
function on(name,self,callback){
  var tuple = [self,callback]
  var callbacks = events[name]
  if(Array.isArray(callbacks)){
    callbacks.push(tuple)
  }
  else{
    events[name] = [tuple]
  }
}

/**
 * 取消订阅
 */
function remove(name,self){
  var callbacks = events[name]
  if(Array.isArray(callbacks)){
    events[name] = callbacks.filter((tuple) => {
        return tuple[0] != self
    })
  }
}

/**
 * 发出
 */
function emit(name,data){
  var callbacks = events[name]
  if(Array.isArray(callbacks)){
    callbacks.map((tuple) =>{
      var self = tuple[0]
      var callback = tuple[1]
      callback.call(self,data)
    })
  }
}

exports.on = on
exports.remove = remove
exports.emit = emit